"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""
import random
import string


def main():
    # 定义字符集
    all_chars = string.ascii_letters + string.digits + "_"
    # 生成 20 个随机字符组
    random_string = ""
    random_list = []
    random_set = set()
    random_tuple = ()
    for _ in range(20):
        random_char = random.choice(all_chars)
        random_string += random_char
        random_list.append(random_char)
        random_set.add(random_char)
    random_tuple = tuple(random_list)

    print(f"随机生成的字符串: {random_string}")
    print(f"随机生成的列表: {random_list}")
    print(f"随机生成的集合: {random_set}")
    print(f"随机生成的元组: {random_tuple}")

    # 对字符串进行切片操作
    sliced_string_1 = random_string[4:14]
    sliced_string_2 = random_string[-16:-6]
    print(f"字符串切片方式一: {sliced_string_1}")
    print(f"字符串切片方式二: {sliced_string_2}")

    # 对列表进行切片操作
    sliced_list_1 = random_list[4:14]
    sliced_list_2 = random_list[-16:-6]
    print(f"列表切片方式一: {sliced_list_1}")
    print(f"列表切片方式二: {sliced_list_2}")


if __name__ == "__main__":
    main()